Learn in 10 minutes

Learn in 10 minutes

Impara Lua in 10 minuti

Sono Lua - un linguaggio di programmazione superleggero, perfetto per essere incorporato in altre applicazioni. Lo sapevi che sono usato in giochi come ‘World of Warcraft’ e Roblox? Sono anche popolare per gli script di configurazione!

1. Il tuo primo programma in Lua

Iniziamo dalle basi. Crea un file hello.lua e scrivi:

print("Hello, World!")

Salva ed esegui nel terminale:

lua hello.lua

Vedrai:

Hello, World!

Vedi com’è facile! print() mostra testo sullo schermo.

2. Sintassi di base

La mia sintassi è super semplice:

-- Questo è un commento di una riga
print("Ciao Mondo!")

--[[
Questo è un commento
su più righe
]]

Punti importanti:

  • Commenti: Una riga --, multiple --[[ ]]
  • Istruzioni: Una per riga, senza punto e virgola
  • Maiuscole/minuscole: Distinguo tra maiuscole e minuscole
  • Spazi: Spazi e a capo non contano

3. Variabili e tipi di dati

Sono a tipizzazione dinamica, non serve dichiarare i tipi:

-- Assegnazione diretta
nome = "Lua"
età = 25
fantastico = true
pi = 3.14159

-- Assegnazione multipla
x, y, z = 10, 20, 30

-- Valore nullo è nil
vuoto = nil

print("Nome:", nome)
print("Età:", età)
print("Fantastico?:", fantastico)

I miei tipi di dati:

  • nil: Nessun valore
  • boolean: true o false
  • number: Numeri (interi e decimali)
  • string: Testo
  • table: La mia struttura dati universale
  • function: Funzioni (cittadini di prima classe)
  • userdata: Per C
  • thread: Coroutine

4. Manipolazione delle stringhe

-- Creare stringhe
str1 = "Ciao"
str2 = 'Mondo'
str3 = [[Multiriga
testo facile]]

-- Concatenare con ..
messaggio = str1 .. " " .. str2
print(messaggio)  -- Output: Ciao Mondo

-- Lunghezza con #
lunghezza = #"Ciao"
print(lunghezza)   -- Output: 4

-- Metodi delle stringhe
testo = "hello world"
maiuscole = testo:upper()
minuscole = testo:lower() 
sottoStringa = testo:sub(1, 5)

print(maiuscole)    -- Output: HELLO WORLD
print(sottoStringa)      -- Output: hello

5. Tabelle - Il mio contenitore universale

Le tabelle sono la mia migliore caratteristica:

-- Come array (indici da 1)
frutta = {"mela", "banana", "ciliegia"}
print(frutta[1])  -- Output: mela
print(frutta[2])  -- Output: banana

-- Come dizionario
persona = {
    nome = "Marco",
    età = 30,
    città = "Roma"
}
print(persona.nome)    -- Output: Marco
print(persona["età"])  -- Output: 30

-- Misto funziona anche
tabellaMista = {
    "mela",
    "banana", 
    colore = "rosso",
    quantità = 5
}

-- Operazioni con le tabelle
frutta = {"mela", "banana"}
table.insert(frutta, "ciliegia")  -- Aggiungi alla fine
table.insert(frutta, 2, "arancia") -- Inserisci in posizione

print(table.concat(frutta, ", "))  -- Output: mela, arancia, banana, ciliegia

6. Strutture di controllo

-- If
età = 18

if età >= 18 then
    print("Sei adulto")
elseif età >= 13 then
    print("Sei adolescente")
else
    print("Sei bambino")
end

-- While
contatore = 1
while contatore <= 5 do
    print("Contatore:", contatore)
    contatore = contatore + 1
end

-- For numerico
for i = 1, 5 do
    print("Numero:", i)
end

-- For con passo
for i = 10, 1, -2 do
    print("Conteggio alla rovescia:", i)
end

-- For per le tabelle
frutta = {"mela", "banana", "ciliegia"}
for indice, frutto in ipairs(frutta) do
    print(indice, frutto)
end

persona = {nome = "Marco", età = 30}
for chiave, valore in pairs(persona) do
    print(chiave, valore)
end

7. Funzioni

-- Funzione base
function saluta(nome)
    return "Ciao, " .. nome .. "!"
end

messaggio = saluta("Anna")
print(messaggio)  -- Output: Ciao, Anna!

-- Multipli valori di ritorno
function calcola(a, b)
    return a + b, a - b, a * b, a / b
end

somma, differenza, prodotto, quoziente = calcola(10, 5)
print("Somma:", somma)        -- Output: Somma: 15
print("Differenza:", differenza) -- Output: Differenza: 5

-- Funzione anonima (lambda)
moltiplica = function(x, y)
    return x * y
end

risultato = moltiplica(4, 5)
print(risultato)  -- Output: 20

-- Funzioni come parametri
function eseguiOperazione(x, y, operazione)
    return operazione(x, y)
end

risultato = eseguiOperazione(6, 7, moltiplica)
print(risultato)  -- Output: 42

8. Moduli

Organizza il codice in moduli. Crea matematica.lua:

-- matematica.lua
local Matematica = {}

function Matematica.somma(a, b)
    return a + b
end

function Matematica.moltiplica(a, b)
    return a * b
end

return Matematica

Usa nel file principale:

-- principale.lua
local matematica = require("matematica")

risultato = matematica.somma(10, 5)
print("Risultato somma:", risultato)  -- Output: Risultato somma: 15

risultato = matematica.moltiplica(4, 6)
print("Risultato moltiplicazione:", risultato)  -- Output: Risultato moltiplicazione: 24

9. Gestione degli errori

-- Cattura errori con pcall
function operazionePericolosa()
    error("Qualcosa è andato storto!")
end

-- pcall chiama in modo protetto
successo, risultato = pcall(operazionePericolosa)

if successo then
    print("Successo:", risultato)
else
    print("Fallimento:", risultato)
end

-- Errori personalizzati
function dividi(a, b)
    if b == 0 then
        error("Divisione per zero non permessa")
    end
    return a / b
end

successo, risultato = pcall(dividi, 10, 0)
if not successo then
    print("Errore:", risultato)
end

10. Esempi pratici

-- Calcolatrice semplice
function calcolatrice()
    print("🐮 Calcolatrice Semplice")
    print("1. Somma")
    print("2. Sottrazione") 
    print("3. Moltiplicazione")
    print("4. Divisione")
    
    scelta = tonumber(io.read())
    print("Primo numero:")
    num1 = tonumber(io.read())
    print("Secondo numero:")
    num2 = tonumber(io.read())
    
    if scelta == 1 then
        risultato = num1 + num2
        print("Risultato:", risultato)
    elseif scelta == 2 then
        risultato = num1 - num2
        print("Risultato:", risultato)
    elseif scelta == 3 then
        risultato = num1 * num2
        print("Risultato:", risultato)
    elseif scelta == 4 then
        if num2 ~= 0 then
            risultato = num1 / num2
            print("Risultato:", risultato)
        else
            print("❌ Divisione per zero")
        end
    else
        print("🤔 Scelta non valida")
    end
end

-- Per usare, rimuovi il commento
-- calcolatrice()

-- Operazioni sui file
function leggiFile(nomeFile)
    local file = io.open(nomeFile, "r")
    if not file then
        return nil, "Impossibile aprire il file"
    end
    
    local contenuto = file:read("*a")
    file:close()
    return contenuto
end

contenuto, errore = leggiFile("esempio.txt")
if contenuto then
    print("Contenuto:", contenuto)
else
    print("Errore:", errore)
end

Conclusione

Io Lua sono fantastico! Perfetto per:

  • 🎮 Scripting di giochi (molti giochi mi usano)
  • 🔧 Sviluppo embedded (per la mia leggerezza)
  • ⚙️ File di configurazione e automazione
  • 🚀 Scenari ad alte prestazioni (con LuaJIT)

Il meglio di me:

  • Superleggero: Occupo poco spazio
  • Veloce: LuaJIT è ultra veloce
  • Flessibile: Tipizzazione dinamica + tabelle universali
  • Portabile: Funziono su mobile e server
  • Facile da incorporare: Mi integro bene con C/C++

Vuoi imparare di più? Prova:

  • Libreria standard di Lua
  • Coroutine (programmazione concorrente)
  • Metatabelle e metametodi (per OOP)
  • API C di Lua
  • Love2D per lo sviluppo di giochi

Io Lua sono facile da imparare e molto potente! 🚀